package br.uniceub.fsw.academicmobile.dao;

import java.util.ArrayList;
import br.uniceub.fsw.academicmobile.vo.FaculdadeVO;
import br.uniceub.fsw.academicmobile.vo.CursoVO;
import br.uniceub.fsw.academicmobile.vo.DisciplinaVO;
import br.uniceub.fsw.academicmobile.vo.ProfessorVO;
import br.uniceub.fsw.academicmobile.vo.TurmaVO;
import br.uniceub.fsw.academicmobile.vo.AlunoDiarioVO;
import br.uniceub.fsw.academicmobile.vo.AlunoPautaVO;
import br.uniceub.fsw.academicmobile.vo.PautaVO;
import java.sql.ResultSet;
import br.uniceub.fsw.academicmobile.vo.DiarioVO;

import br.uniceub.fsw.academicmobile.vo.ObservacaoPautaVO;
import java.io.OutputStream;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import net.sf.jasperreports.engine.*;
import java.io.File;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;

/**
 * Dao responsável pelas operaçoes de banco associadas caso de uso de relatorio
 * @author Pedro Ivo
 */
public class RelatorioDAO {
    
    /**
     * Utilizado somente para Testes.
     */ 
    public static void main(String args[]) {
        RelatorioDAO relatorio = new RelatorioDAO();
        //System.out.println(relatorio.pegaMencaoDoMes("1", 2008, 10));
        //System.out.println(relatorio.pegaMencaoDoMes("3", 2008, 10));
        //System.out.println(relatorio.pegaFrequenciaDoMes("1", 11));
        
        // testa colunas
        //PautaVO pauta = new PautaVO();
        //pauta = relatorio.populaPautaCols(pauta, 10, 12345);
        //System.out.println(pauta.getCol01());
        //System.out.println(pauta.getCol03());
        //System.out.println(pauta.getCol05());
        //System.out.println(pauta.getCol07());
        
        //ArrayList alist = (ArrayList) relatorio.criaColecaoAlunoPauta("12345", 12345, 2008, 10);
        //AlunoPautaVO alunoPauta = (AlunoPautaVO) alist.get(0);
        //System.out.println(alunoPauta.getHistorico());
        //ArrayList idAulaList = new ArrayList();
        //idAulaList.add("4");
        //idAulaList.add("12");
        //alunoPauta = relatorio.populaAlunoPautaCols(alunoPauta, idAulaList, 12345, 10);        
        //System.out.println("total de faltas"+alunoPauta.getTotalFaltas());
        ProfessorVO professor = new ProfessorVO();
        professor.setIdCdDrt(new Long(1234567890));
        
        //relatorio.gerarRelatorioPauta(2, 2008, 10, "Noturno", 12345, 12345, 12345, 12345, professor);
        relatorio.gerarRelatorioPauta(2, 2008, 10, "Noturno", 12345, "12345", "12345", "12345", professor);
        System.out.println(relatorio.pautaVO.getCargaHoraria());
    }
        
    private BD bd;
    private PautaVO pautaVO;
    private DiarioVO diarioVO;
    private ArrayList idAulaList;
    
    private String PATH_REL_PAUTA_JRXML = "C:"+File.separator+"Pauta.jrxml";
    private String PATH_SUB_REL_PAUTA_JASPER = "C:"+File.separator+"Pauta_subreport0.jasper";
    private String PATH_FIGURA_REL_SGI = "C:"+File.separator+"sgi.png";    
    private String PATH_REL_DIARIO_JRXML = "C:"+File.separator+"Diario.jrxml";        
    
    public RelatorioDAO() {
       bd = new BD();
       pautaVO = new PautaVO();
       diarioVO = new DiarioVO();
       idAulaList = new ArrayList();
    }
    public RelatorioDAO(String path) {
       bd = new BD();
       pautaVO = new PautaVO();
       diarioVO = new DiarioVO();
       idAulaList = new ArrayList();
       
       PATH_REL_PAUTA_JRXML = path+"Pauta.jrxml";
       PATH_SUB_REL_PAUTA_JASPER = path+"Pauta_subreport0.jasper";
       PATH_FIGURA_REL_SGI = path+"sgi.png";    
       PATH_REL_DIARIO_JRXML = path+"Diario.jrxml";         
    }    

    public void exibirRelatorioPauta(OutputStream out) {    
        PautaVO pauta = pautaVO;
       
        // O datasource principal
        JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(pauta.getAlunoPauta());   

        // O datasource do subrelatorio
        JRBeanCollectionDataSource dsSub = new JRBeanCollectionDataSource(pauta.getObservacaoPauta());
        
        // Parametros do relatorios   
        Map parametros = new HashMap();   
        parametros.put("imagemSgi", new File(PATH_FIGURA_REL_SGI));
        parametros.put("caminhoSubRel", PATH_SUB_REL_PAUTA_JASPER);
        parametros.put("dataSourceObs", dsSub);        
        
    	parametros.put("mantida", pauta.getMantida());
    	parametros.put("cursoHabilitacao", pauta.getCursoHabilitacao());
    	parametros.put("periodoLetivo", pauta.getPeriodoLetivo());
    	parametros.put("periodo", pauta.getPeriodo());
    	parametros.put("disciplina", pauta.getDisciplina());
    	parametros.put("salasHorarios", pauta.getSalasHorarios());
    	parametros.put("professores", pauta.getProfessores());
    	parametros.put("unidadeFuncional", pauta.getUnidadeFuncional());
    	parametros.put("mes", pauta.getMes());
    	parametros.put("turno", pauta.getTurno());
    	parametros.put("turma", pauta.getTurma());
    	parametros.put("cargaHoraria", pauta.getCargaHoraria());
    	parametros.put("numeroAulasPrevistas", pauta.getNumeroAulasPrevistas());
    	parametros.put("numeroAulasDadas", pauta.getNumeroAulasDadas());
    	    	
    	parametros.put("col01", pauta.getCol01());
    	parametros.put("col03", pauta.getCol03());
    	parametros.put("col05", pauta.getCol05());
    	parametros.put("col07", pauta.getCol07());
    	parametros.put("col09", pauta.getCol09());
    	parametros.put("col11", pauta.getCol11());
    	parametros.put("col13", pauta.getCol13());
    	parametros.put("col15", pauta.getCol15());
    	parametros.put("col17", pauta.getCol17());
    	parametros.put("col19", pauta.getCol19());
    	parametros.put("col21", pauta.getCol21());
    	parametros.put("col23", pauta.getCol23());
    	parametros.put("col25", pauta.getCol25());  	
           
        try {               
            JasperReport jr = JasperCompileManager.compileReport(PATH_REL_PAUTA_JRXML);            
            JasperPrint impressao = JasperFillManager.fillReport(jr ,parametros, ds);  
            JasperExportManager.exportReportToPdfStream(impressao, out);
        } catch (JRException e) {   
            e.printStackTrace();   
        }   
    }
    
    public void exibirRelatorioDiario(OutputStream out) {  
        DiarioVO diario = diarioVO;        
       
        // O datasource   
        JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(diario.getAlunoDiario());   
  
        // Parametros do relatorios   
        Map parametros = new HashMap();   
        parametros.put("imagemSgi", new File(PATH_FIGURA_REL_SGI));        
        parametros.put("mantida", diario.getMantida());
    	parametros.put("unidadeFuncional", diario.getUnidadeFuncional());
    	parametros.put("cursoHabilitacao", diario.getCursoHabilitacao());
    	parametros.put("periodo", diario.getPeriodo());
    	parametros.put("disciplina", diario.getDisciplina());
    	parametros.put("salasHorarios", diario.getSalasHorarios());
    	parametros.put("professores", diario.getProfessores());
    	parametros.put("periodoLetivo", diario.getPeriodoLetivo());
    	parametros.put("turno", diario.getTurno());
    	parametros.put("turma", diario.getTurma());
    	parametros.put("cargaHoraria", diario.getCargaHoraria());
    	parametros.put("numeroAulasPrevistas", diario.getNumeroAulasPrevistas());
    	parametros.put("numeroAulasDadas", diario.getNumeroAulasDadas());

        try {     
            JasperReport jr = JasperCompileManager.compileReport(PATH_REL_DIARIO_JRXML);            
            JasperPrint impressao = JasperFillManager.fillReport(jr ,parametros, ds);  
            JasperExportManager.exportReportToPdfStream(impressao, out);
        } catch (JRException e) {   
            e.printStackTrace();   
        }   

    }
    
    public String getMes(int mes) {        
        if(mes == 1) return "Janeiro";
        if(mes == 2) return "Fevereiro";
        if(mes == 3) return "Março";
        if(mes == 4) return "Abril";
        if(mes == 5) return "Maio";
        if(mes == 6) return "Junho";
        if(mes == 7) return "Julho";
        if(mes == 8) return "Agosto";
        if(mes == 9) return "Setembro";
        if(mes == 10) return "Outubro";
        if(mes == 11) return "Novembro";                
        if(mes == 12) return "Dezembro";
        return "";
    }
    
    public String getData(String data) {                    
        data = data.substring(0, 10);
        String[] dataSplit = data.split("-");
        data = dataSplit[2]+"/"+dataSplit[1]+"/"+dataSplit[0];        
        return data;
    }    
    
    public String getDiaDaData(String data) {                    
        data = data.substring(0, 10);
        String[] dataSplit = data.split("-");       
        return dataSplit[2];
    }      

    public Collection criaColecaoObservacaoPauta(String idTurma, int ano, int mes) {
        String SQL = "SELECT * FROM tb_aula t where tb_turma_ID_turma = <01> and dt_aula > '<02>' and dt_aula < '<03>' ORDER BY dt_aula;";        
        SQL = SQL.replaceAll("<01>", idTurma);
        SQL = SQL.replaceAll("<02>", ano+"-"+mes+"-01");
        SQL = SQL.replaceAll("<03>", ano+"-"+mes+"-31");
        ArrayList observacoesPauta = new ArrayList();
        ObservacaoPautaVO observacaoPauta;	
        try{
            ResultSet rs = bd.getResultSet(SQL);
            while(rs.next()){
                observacaoPauta = new ObservacaoPautaVO();
                observacaoPauta.setData(getData((rs.getObject("dt_aula")).toString()));
                observacaoPauta.setDesenvolvimentoPrograma(rs.getString("TE_aula"));
                observacaoPauta.setRubricaProfessor(" ");			                                
                observacoesPauta.add(observacaoPauta);
            }
        } catch (Exception ex){
            ex.printStackTrace();
        }
        if(observacoesPauta.isEmpty()) {
            observacaoPauta = new ObservacaoPautaVO();
            observacaoPauta.setData(" ");
            observacaoPauta.setDesenvolvimentoPrograma(" ");
            observacaoPauta.setRubricaProfessor(" ");			                                
            observacoesPauta.add(observacaoPauta);            
        }
        return observacoesPauta;   		
    }
        
    private AlunoPautaVO populaAlunoPautaCols(AlunoPautaVO alunoPautaVO, 
            ArrayList idAulaList, int idTurma, int mes) {
    
        alunoPautaVO.setCol01(" ");
        alunoPautaVO.setCol02(" ");
        alunoPautaVO.setCol03(" ");
        alunoPautaVO.setCol04(" ");
        alunoPautaVO.setCol05(" ");
        alunoPautaVO.setCol06(" ");
        alunoPautaVO.setCol07(" ");
        alunoPautaVO.setCol08(" ");
        alunoPautaVO.setCol09(" ");
        alunoPautaVO.setCol10(" ");
        alunoPautaVO.setCol11(" ");
        alunoPautaVO.setCol12(" ");
        alunoPautaVO.setCol13(" ");
        alunoPautaVO.setCol14(" ");
        alunoPautaVO.setCol15(" ");
        alunoPautaVO.setCol16(" ");
        alunoPautaVO.setCol17(" ");
        alunoPautaVO.setCol18(" ");
        alunoPautaVO.setCol19(" ");
        alunoPautaVO.setCol20(" ");
        alunoPautaVO.setCol21(" ");
        alunoPautaVO.setCol22(" ");
        alunoPautaVO.setCol23(" ");
        alunoPautaVO.setCol24(" ");
        alunoPautaVO.setCol25(" ");
        int totalFaltas = 0;
        for(int i = 0; i< idAulaList.size(); i++) {
            String SQL = "SELECT tp_frequencia1, tp_frequencia2 FROM tb_frequencia a, tb_aula b ";
            SQL += "where dt_mes = <01> and a.tb_aula_id_aula = b.id_aula ";
            SQL += "and b.tb_turma_id_turma = <02> and tb_historico_id_historico = <03> ";
            SQL += "and id_aula = <04>";        
            SQL = SQL.replaceAll("<01>", String.valueOf(mes));
            SQL = SQL.replaceAll("<02>", String.valueOf(idTurma));
            SQL = SQL.replaceAll("<03>", alunoPautaVO.getHistorico());   
            SQL = SQL.replaceAll("<04>", idAulaList.get(i).toString());
            

            try{
                ResultSet rs = bd.getResultSet(SQL);                
                if(rs.next()){
                    String freq1 = rs.getString("tp_frequencia1");
                    String freq2 = rs.getString("tp_frequencia2");  
                    if(freq1.equals("A")) {
                        totalFaltas++;
                        freq1 = "F";
                    } else {
                        freq1 = ".";
                    }
                    if(freq2.equals("A")) {
                        totalFaltas++;
                        freq2 = "F";
                    } else {
                        freq2 = ".";
                    }                       
                    
                    if(i == 0) {
                        alunoPautaVO.setCol01(freq1);
                        alunoPautaVO.setCol02(freq2);
                    } else if(i == 1) {
                        alunoPautaVO.setCol03(freq1);
                        alunoPautaVO.setCol04(freq2);
                    } else if(i == 2) {
                        alunoPautaVO.setCol05(freq1);
                        alunoPautaVO.setCol06(freq2);
                    } else if(i == 3) {
                        alunoPautaVO.setCol07(freq1);
                        alunoPautaVO.setCol08(freq2);
                    } else if(i == 4) {
                        alunoPautaVO.setCol09(freq1);
                        alunoPautaVO.setCol10(freq2);
                    } else if(i == 5) {
                        alunoPautaVO.setCol11(freq1);
                        alunoPautaVO.setCol12(freq2);
                    } else if(i == 6) {
                        alunoPautaVO.setCol13(freq1);
                        alunoPautaVO.setCol14(freq2);
                    } else if(i == 7) {
                        alunoPautaVO.setCol15(freq1);
                        alunoPautaVO.setCol16(freq2);
                    } else if(i == 8) {
                        alunoPautaVO.setCol17(freq1);
                        alunoPautaVO.setCol18(freq2);
                    } else if(i == 9) {
                        alunoPautaVO.setCol19(freq1);
                        alunoPautaVO.setCol20(freq2);
                    } else if(i == 10) {
                        alunoPautaVO.setCol21(freq1);
                        alunoPautaVO.setCol22(freq2);
                    } else if(i == 11) {
                        alunoPautaVO.setCol23(freq1);
                        alunoPautaVO.setCol24(freq2);
                    } else if(i == 12) {
                        alunoPautaVO.setCol25(freq1);
                    }                                  
                }
                alunoPautaVO.setTotalFaltas(String.valueOf(totalFaltas));
            } catch (Exception ex){
                ex.printStackTrace();
            }          
        }
        return alunoPautaVO;
    }
    
    private Collection criaColecaoAlunoPauta(String idDisciplina, int idTurma, int ano, int mes) {
        String SQL = "SELECT a.id_cd_ra, a.no_aluno, b.tb_turma_id_turma, c.id_historico, c.tb_disciplina_id_cd_disciplina, c.qt_frequencia, c.sg_mencao ";
        SQL += "FROM tb_aluno a, tb_aluno_turma b, tb_historico c WHERE a.id_cd_ra = b.tb_aluno_id_cd_ra ";
        SQL += "AND c.tb_aluno_id_cd_ra = b.tb_aluno_id_cd_ra AND b.tb_turma_id_turma = c.tb_turma_id_turma ";
        SQL += "AND c.tb_disciplina_id_cd_disciplina = <01> AND b.tb_turma_id_turma = <02> ORDER BY a.no_aluno";               
        SQL = SQL.replaceAll("<01>", idDisciplina);
        SQL = SQL.replaceAll("<02>", String.valueOf(idTurma));     
        ArrayList alunosPauta = new ArrayList();		
        AlunoPautaVO alunoPauta;	
        try{
            ResultSet rs = bd.getResultSet(SQL);
            while(rs.next()){
                alunoPauta = new AlunoPautaVO();
                alunoPauta.setRa(rs.getObject("id_cd_ra").toString());
                alunoPauta.setNome(rs.getObject("no_aluno").toString());
		alunoPauta.setHistorico(rs.getObject("id_historico").toString());
                alunoPauta.setMencao(pegaMencaoDoMes(alunoPauta.getHistorico(), ano, mes));
                alunoPauta = populaAlunoPautaCols(alunoPauta, idAulaList, idTurma, mes);
                alunosPauta.add(alunoPauta);
                
            }
        } catch (Exception ex){
            ex.printStackTrace();
        }
        if(alunosPauta.isEmpty()) {
            alunoPauta = new AlunoPautaVO();
            alunoPauta.setNome(" ");
            alunoPauta.setRa(" ");
            alunoPauta.setCol01(" ");
            alunoPauta.setCol02(" ");
            alunoPauta.setCol03(" ");
            alunoPauta.setCol04(" ");
            alunoPauta.setCol05(" ");
            alunoPauta.setCol06(" ");
            alunoPauta.setCol07(" ");
            alunoPauta.setCol08(" ");
            alunoPauta.setCol09(" ");
            alunoPauta.setCol10(" ");
            alunoPauta.setCol11(" ");
            alunoPauta.setCol12(" ");
            alunoPauta.setCol13(" ");
            alunoPauta.setCol14(" ");
            alunoPauta.setCol15(" ");
            alunoPauta.setCol16(" ");
            alunoPauta.setCol17(" ");
            alunoPauta.setCol18(" ");
            alunoPauta.setCol19(" ");
            alunoPauta.setCol20(" ");
            alunoPauta.setCol21(" ");
            alunoPauta.setCol22(" ");
            alunoPauta.setCol23(" ");
            alunoPauta.setCol24(" ");
            alunoPauta.setCol25(" ");
            alunoPauta.setTotalFaltas(" ");            
            alunoPauta.setMencao(" ");
            alunosPauta.add(alunoPauta);
        }		
        return alunosPauta;
    }
        
    public String pegaMencaoDoMes(String idHistorico, int ano, int mes) {        
        String SQL = "SELECT sg_mencao FROM tb_mencao a, tb_sgmencao b where tb_historico_id_historico=<01> ";
        SQL += "AND tb_tipomencao_id_tipomencao = 1 and tb_sgmencao_id_tipomencao = id_sgmencao and ";
        SQL += "dt_mencao > '<02>' and dt_mencao < '<03>'";                
        SQL = SQL.replaceAll("<01>", idHistorico);
        SQL = SQL.replaceAll("<02>", ano+"-"+mes+"-01");
        SQL = SQL.replaceAll("<03>", ano+"-"+mes+"-31");
        try{
            ResultSet rs = bd.getResultSet(SQL);
            if(rs.next()) {
                return rs.getString("sg_mencao");
            }
        } catch (Exception ex){
            ex.printStackTrace();
        }
        return " ";
    }
    
    public String pegaFrequenciaDoMes(String idHistorico, int mes) {                
        String SQL = "SELECT tp_frequencia1, tp_frequencia2 FROM tb_frequencia ";
        SQL += "WHERE tb_historico_id_historico = <01> AND dt_mes = <02>";        
        
        SQL = SQL.replaceAll("<01>", idHistorico);
        SQL = SQL.replaceAll("<02>", String.valueOf(mes));
        int total = 0;
        
        try{
            ResultSet rs = bd.getResultSet(SQL); 
            int totalRegistros = 0;
            while(rs.next()) {
                String freq1 = rs.getString("tp_frequencia1");
                String freq2 = rs.getString("tp_frequencia2");
                if(freq1.equals("A")) total++;
                if(freq2.equals("A")) total++;
                totalRegistros++;
            }
            if(totalRegistros == 0)
                return " ";
        } catch (Exception ex){
            ex.printStackTrace();
        }
        return String.valueOf(total);
    }   
    
    private Collection criaColecaoAlunoDiario(String idDisciplina, int idTurma, 
            int ano, int periodoLetivo) {
        String SQL = "SELECT a.id_cd_ra, a.no_aluno, b.tb_turma_id_turma, c.id_historico, c.tb_disciplina_id_cd_disciplina, c.qt_frequencia, c.sg_mencao ";
        SQL += "FROM tb_aluno a, tb_aluno_turma b, tb_historico c WHERE a.id_cd_ra = b.tb_aluno_id_cd_ra ";
        SQL += "AND c.tb_aluno_id_cd_ra = b.tb_aluno_id_cd_ra AND b.tb_turma_id_turma = c.tb_turma_id_turma ";
        SQL += "AND c.tb_disciplina_id_cd_disciplina = <01> AND b.tb_turma_id_turma = <02> ORDER BY a.no_aluno";               
        SQL = SQL.replaceAll("<01>", idDisciplina);
        SQL = SQL.replaceAll("<02>", String.valueOf(idTurma));

        ArrayList alunosDiario = new ArrayList();
        AlunoDiarioVO alunoDiario;	
        try{
            ResultSet rs = bd.getResultSet(SQL);
            while(rs.next()){
                alunoDiario = new AlunoDiarioVO();
                alunoDiario.setRa(rs.getObject("id_cd_ra").toString());
                alunoDiario.setNome(rs.getObject("no_aluno").toString());
		alunoDiario.setHistorico(rs.getObject("id_historico").toString());
                alunoDiario.setMencaoFinal(rs.getObject("sg_mencao").toString());
                alunoDiario.setTotalFaltas(rs.getObject("qt_frequencia").toString());
                alunoDiario.setObservacao(" ");
                
                if(periodoLetivo==1) {
                    alunoDiario.setMes1(pegaFrequenciaDoMes(alunoDiario.getHistorico(), 2));
                    alunoDiario.setMes2(pegaFrequenciaDoMes(alunoDiario.getHistorico(), 3));
                    alunoDiario.setMes3(pegaFrequenciaDoMes(alunoDiario.getHistorico(), 4));
                    alunoDiario.setMes4(pegaFrequenciaDoMes(alunoDiario.getHistorico(), 5));
                    alunoDiario.setMes5(pegaFrequenciaDoMes(alunoDiario.getHistorico(), 6));
                    alunoDiario.setMes6(pegaFrequenciaDoMes(alunoDiario.getHistorico(), 7));                       
                    alunoDiario.setVer1(pegaMencaoDoMes(alunoDiario.getHistorico(), ano, 2));
                    alunoDiario.setVer2(pegaMencaoDoMes(alunoDiario.getHistorico(), ano, 3));
                    alunoDiario.setVer3(pegaMencaoDoMes(alunoDiario.getHistorico(), ano, 4));
                    alunoDiario.setVer4(pegaMencaoDoMes(alunoDiario.getHistorico(), ano, 5));
                    alunoDiario.setVer5(pegaMencaoDoMes(alunoDiario.getHistorico(), ano, 6));
                    alunoDiario.setVer6(pegaMencaoDoMes(alunoDiario.getHistorico(), ano, 7));                    
                } else if(periodoLetivo==2) {
                    alunoDiario.setMes1(pegaFrequenciaDoMes(alunoDiario.getHistorico(), 8));
                    alunoDiario.setMes2(pegaFrequenciaDoMes(alunoDiario.getHistorico(), 9));
                    alunoDiario.setMes3(pegaFrequenciaDoMes(alunoDiario.getHistorico(), 10));
                    alunoDiario.setMes4(pegaFrequenciaDoMes(alunoDiario.getHistorico(), 11));
                    alunoDiario.setMes5(pegaFrequenciaDoMes(alunoDiario.getHistorico(), 12));
                    alunoDiario.setMes6(" ");               
                    alunoDiario.setVer1(pegaMencaoDoMes(alunoDiario.getHistorico(), ano, 8));
                    alunoDiario.setVer2(pegaMencaoDoMes(alunoDiario.getHistorico(), ano, 9));
                    alunoDiario.setVer3(pegaMencaoDoMes(alunoDiario.getHistorico(), ano, 10));
                    alunoDiario.setVer4(pegaMencaoDoMes(alunoDiario.getHistorico(), ano, 11));
                    alunoDiario.setVer5(pegaMencaoDoMes(alunoDiario.getHistorico(), ano, 12));
                    alunoDiario.setVer6(" ");
                }                                
                alunosDiario.add(alunoDiario);
            }
        } catch (Exception ex){
            ex.printStackTrace();
        }
        if(alunosDiario.isEmpty()) {
            alunoDiario = new AlunoDiarioVO();
            alunoDiario.setRa("");
            alunoDiario.setNome("");
            alunoDiario.setHistorico("");
            alunoDiario.setMencaoFinal("");
            alunoDiario.setTotalFaltas("");
            alunoDiario.setMes1("");
            alunoDiario.setMes2("");
            alunoDiario.setMes3("");
            alunoDiario.setMes4("");
            alunoDiario.setMes5("");
            alunoDiario.setMes6("");            
            alunoDiario.setVer1("");
            alunoDiario.setVer2("");
            alunoDiario.setVer3("");
            alunoDiario.setVer4("");
            alunoDiario.setVer5("");
            alunoDiario.setVer6("");			                
            alunoDiario.setObservacao("");
            alunosDiario.add(alunoDiario);            
        }
        return alunosDiario;  
    }
    
    public PautaVO populaPautaCols(PautaVO pautaVO, int mes, int idTurma) {
        String SQL = "SELECT distinct id_aula, dt_aula FROM tb_frequencia a, tb_aula b ";
        SQL += "where dt_mes = <01> and a.tb_aula_id_aula = b.id_aula ";
        SQL += "and b.tb_turma_id_turma = <02> order by dt_aula";
        SQL = SQL.replaceAll("<01>", String.valueOf(mes));
        SQL = SQL.replaceAll("<02>", String.valueOf(idTurma));        
        
        idAulaList = new ArrayList();
        pautaVO.setCol01("");
        pautaVO.setCol03("");
        pautaVO.setCol05("");
        pautaVO.setCol07("");
        pautaVO.setCol09("");
        pautaVO.setCol11("");
        pautaVO.setCol13("");
        pautaVO.setCol15("");
        pautaVO.setCol17("");
        pautaVO.setCol19("");
        pautaVO.setCol21("");
        pautaVO.setCol23("");
        pautaVO.setCol25("");             
        
        try{
            ResultSet rs = bd.getResultSet(SQL); 
            int totalRegistros = 0;
            while(rs.next()) {
                String idAula = rs.getObject("id_aula").toString();
                String diaAula = getDiaDaData(rs.getObject("dt_aula").toString());
                
                idAulaList.add(idAula);
                
                if(totalRegistros == 0) {
                    pautaVO.setCol01(diaAula);
                } else if(totalRegistros == 1) {
                    pautaVO.setCol03(diaAula);
                } else if(totalRegistros == 2) {
                    pautaVO.setCol05(diaAula);
                } else if(totalRegistros == 3) {
                    pautaVO.setCol07(diaAula);
                } else if(totalRegistros == 4) {
                    pautaVO.setCol09(diaAula);
                } else if(totalRegistros == 5) {
                    pautaVO.setCol11(diaAula);
                } else if(totalRegistros == 6) {
                    pautaVO.setCol13(diaAula);
                } else if(totalRegistros == 7) {
                    pautaVO.setCol15(diaAula);
                } else if(totalRegistros == 8) {
                    pautaVO.setCol17(diaAula);
                } else if(totalRegistros == 9) {
                    pautaVO.setCol19(diaAula);
                } else if(totalRegistros == 10) {
                    pautaVO.setCol21(diaAula);
                } else if(totalRegistros == 11) {
                    pautaVO.setCol23(diaAula);
                } else if(totalRegistros == 12) {
                    pautaVO.setCol25(diaAula);
                }
                totalRegistros++;
            }              
        } catch (Exception ex){
            ex.printStackTrace();
        }         
        return pautaVO;
    }
        
    public void gerarRelatorioPauta(int periodoLetivo, int ano, int mes,
            String turno, int turma, String faculdade, String curso, 
            String disciplina, ProfessorVO professor) {
        pautaVO = new PautaVO();  
        
        DisciplinaVO disciplinaVO = consultarDisciplinaPorID(disciplina);
        CursoVO cursoVO = consultarCursoPorID(curso);
        FaculdadeVO faculdadeVO = consultarFaculdadePorId(faculdade);
        TurmaVO turmaVO = consultarTurmaPorId(String.valueOf(turma)); 
        
        pautaVO.setCargaHoraria(disciplinaVO.getHrCarga());
        pautaVO = populaPautaCols(pautaVO, mes, turma);
        pautaVO.setCursoHabilitacao(cursoVO.getNoCurso()+" / "+cursoVO.getNoCurso());
        pautaVO.setDisciplina(disciplinaVO.getNoDisciplina());
        pautaVO.setMantida("Centro Universitário de Brasília");
        pautaVO.setMes(getMes(mes));
        pautaVO.setNumeroAulasDadas("");
        pautaVO.setNumeroAulasPrevistas("");        
        pautaVO.setPeriodo(disciplinaVO.getNrPeriodo()+"° Semestre");
        pautaVO.setPeriodoLetivo(turmaVO.getNrSemestre()+"° Semestre/"+turmaVO.getDtAno());
        pautaVO.setProfessores(professor.getNoProfessor());
        pautaVO.setSalasHorarios(turmaVO.getHrTurma());
        pautaVO.setTurma(turmaVO.getSgTurma());
        pautaVO.setTurno(turmaVO.getHrTurno());
        pautaVO.setUnidadeFuncional(faculdadeVO.getNoFaculdade());
        pautaVO.setAlunoPauta(criaColecaoAlunoPauta(disciplina, turma, ano, mes));
        pautaVO.setObservacaoPauta(criaColecaoObservacaoPauta(String.valueOf(turma), ano, mes));        
    }
    
    // tem q montar a colection de alunos ainda
    public void gerarRelatorioDiario(int periodoLetivo, int ano, int turma, String faculdade, String curso, 
            String disciplina, ProfessorVO professor) {
        diarioVO = new DiarioVO();
        DisciplinaVO disciplinaVO = consultarDisciplinaPorID(disciplina);
        CursoVO cursoVO = consultarCursoPorID(curso);
        FaculdadeVO faculdadeVO = consultarFaculdadePorId(faculdade);
        TurmaVO turmaVO = consultarTurmaPorId(String.valueOf(turma));        
        
        diarioVO.setAlunoDiario(criaColecaoAlunoDiario(disciplina, turma, ano, periodoLetivo));            
        diarioVO.setCargaHoraria(disciplinaVO.getHrCarga());
        diarioVO.setCursoHabilitacao(cursoVO.getNoCurso()+" / "+cursoVO.getNoCurso());
        diarioVO.setDisciplina(disciplinaVO.getNoDisciplina());
        diarioVO.setMantida("Centro Universitário de Brasília");
        diarioVO.setNumeroAulasDadas("");
        diarioVO.setNumeroAulasPrevistas("");
        diarioVO.setPeriodo(disciplinaVO.getNrPeriodo()+"° Semestre");
        diarioVO.setPeriodoLetivo(turmaVO.getNrSemestre()+"° Semestre/"+turmaVO.getDtAno());
        diarioVO.setProfessores(professor.getNoProfessor());
        diarioVO.setSalasHorarios(turmaVO.getHrTurma());
        diarioVO.setTurma(turmaVO.getSgTurma());
        diarioVO.setTurno(turmaVO.getHrTurno());
        diarioVO.setUnidadeFuncional(faculdadeVO.getNoFaculdade());       
    }
    
    //passar metodo para TurmaDAO depois
    public TurmaVO consultarTurmaPorId(String idTurma){
        String SQL = "SELECT * FROM tb_turma WHERE ID_turma = <01>";
        SQL = SQL.replaceAll("<01>", idTurma);
        TurmaVO retorno = new TurmaVO();
        try{
            ResultSet rs = bd.getResultSet(SQL);
            if(rs.next()){
                retorno.setIdTurma(rs.getInt("ID_turma"));
                retorno.setTbDisciplinaIdCdDisciplina(rs.getInt("tb_disciplina_ID_CD_disciplina"));
                retorno.setTbProfessorIdCdDrt(rs.getLong("tb_professor_ID_CD_drt"));
                retorno.setTbCursoIdCdCurso(rs.getInt("tb_curso_ID_CD_curso"));
                retorno.setHrTurno(rs.getString("HR_turno"));
                retorno.setHrTurma(rs.getString("HR_turma"));
                retorno.setSgTurma(rs.getString("SG_turma"));
                retorno.setDtAno(rs.getInt("DT_ano"));
                retorno.setNrSemestre(rs.getInt("NR_semestre"));
            }
        } catch (Exception ex){
            System.err.println("TurmaDAO.consultarTurmaPorId:"
					+ ex.getMessage());
        }
        return retorno;
    }
    
    //passar metodo para FaculdadeDAO depois
    public FaculdadeVO consultarFaculdadePorId(String idFaculdade){
        String SQL = "SELECT * FROM tb_faculdade WHERE ID_CD_faculdade=<01>";
        SQL = SQL.replaceAll("<01>", idFaculdade);
        FaculdadeVO retorno = new FaculdadeVO();
        try{
                ResultSet rs = bd.getResultSet(SQL);
                if(rs.next()){
                        retorno.setIdCdFaculdade(rs.getInt("ID_CD_faculdade"));
                        retorno.setNoFaculdade(rs.getString("NO_faculdade"));
                        retorno.setSgFaculdade(rs.getString("SG_faculdade"));
                }
                rs.close();
        } catch (Exception ex) {
                System.err.println("FaculdadeDAO.consultarFaculdadePorId:"
                                + ex.getMessage());
        }
        return retorno;
    }

 //passar metodo para FaculdadeDAO depois
    public FaculdadeVO consultarFaculdadePorIdDoCurso(String idCurso){
        String SQL = "SELECT a.id_cd_faculdade, a.sg_faculdade, a.no_faculdade " +
                "FROM tb_faculdade a, tb_curso b " +
                "WHERE a.id_cd_faculdade = b.tb_faculdade_ID_CD_faculdade " +
                "AND b.id_cd_curso =<01>";
        SQL = SQL.replaceAll("<01>", idCurso);
        FaculdadeVO retorno = new FaculdadeVO();
        try{
                ResultSet rs = bd.getResultSet(SQL);
                if(rs.next()){
                        retorno.setIdCdFaculdade(rs.getInt("ID_CD_faculdade"));
                        retorno.setNoFaculdade(rs.getString("NO_faculdade"));
                        retorno.setSgFaculdade(rs.getString("SG_faculdade"));
                }
                rs.close();
        } catch (Exception ex) {
                System.err.println("FaculdadeDAO.consultarFaculdadePorIdDoCurso:"
                                + ex.getMessage());
        }
        return retorno;
    }
    
    //passar metodo para CursoDAO depois
    public CursoVO consultarCursoPorID(String idCurso) {
        String SQL = "SELECT * FROM tb_curso t WHERE ID_CD_curso = <01>";
        SQL = SQL.replaceAll("<01>", idCurso);
        CursoVO curso = new CursoVO();
        try{
            ResultSet rs = bd.getResultSet(SQL);
            if(rs.next()){    
                curso.setIdCdCurso(rs.getInt("ID_CD_curso"));
                curso.setNoCurso(rs.getString("NO_curso"));
                curso.setTbFaculdadeIdCdFaculdade(rs.getInt("tb_faculdade_ID_CD_faculdade"));
            }
            rs.close();
        } catch (Exception ex) {            
        }
        return curso;
    }
        
    //passar metodo para FaculdadeDAO depois
    public ArrayList consultarFaculdades() {
        String SQL = "SELECT * FROM tb_faculdade";        
        ArrayList faculdadesList = new ArrayList();
        FaculdadeVO faculdade = new FaculdadeVO();
        try{
            ResultSet rs = bd.getResultSet(SQL);
            while(rs.next()){
                faculdade.setIdCdFaculdade(rs.getInt("ID_CD_faculdade"));
                faculdade.setNoFaculdade(rs.getString("NO_faculdade"));
                faculdade.setSgFaculdade(rs.getString("SG_faculdade"));
                faculdadesList.add(faculdade);
            }
            rs.close();
        } catch (Exception ex) {            
        }
        return faculdadesList;
    }
    
    //passar metodo para CursoDAO depois
    public ArrayList consultarCursos(String idFaculdade) {
        String SQL = "SELECT * FROM tb_curso t where tb_faculdade_id_cd_faculdade = <01>";
        SQL = SQL.replaceAll("<01>", idFaculdade);
        ArrayList cursosList = new ArrayList();
        CursoVO curso;
        try{
            ResultSet rs = bd.getResultSet(SQL);
            while(rs.next()){
                curso = new CursoVO();
                curso.setIdCdCurso(rs.getInt("ID_CD_curso"));
                curso.setNoCurso(rs.getString("NO_curso"));
                curso.setTbFaculdadeIdCdFaculdade(Integer.parseInt(idFaculdade));
                cursosList.add(curso);
            }
            rs.close();
        } catch (Exception ex) {            
        }
        return cursosList;
    }    
    
    //passar metodo para DisciplinaDAO depois
    public ArrayList consultarDisciplinas(String idCurso) {
        String SQL = "SELECT * FROM tb_disciplina t WHERE tb_curso_id_cd_curso = <01>";
        SQL = SQL.replaceAll("<01>", idCurso);
        ArrayList disciplinasList = new ArrayList();
        DisciplinaVO disciplina;
        try{
            ResultSet rs = bd.getResultSet(SQL);
            while(rs.next()){
                disciplina = new DisciplinaVO();
                disciplina.setIdCdDisciplina(rs.getInt("ID_CD_disciplina"));
                disciplina.setNoDisciplina(rs.getString("NO_disciplina"));
                disciplinasList.add(disciplina);
            }
            rs.close();
        } catch (Exception ex) {            
        }
        return disciplinasList;
    }   
    
    //passar metodo para DisciplinaDAO depois
    public DisciplinaVO consultarDisciplinaPorID(String idDisciplina) {
        String SQL = "SELECT * FROM tb_disciplina t WHERE ID_CD_disciplina = <01>";
        SQL = SQL.replaceAll("<01>", idDisciplina);
        DisciplinaVO disciplina = new DisciplinaVO();
        try{
            ResultSet rs = bd.getResultSet(SQL);
            if(rs.next()){                
                disciplina.setHrCarga(rs.getString("HR_carga"));
                disciplina.setIdCdDisciplina(rs.getInt("ID_CD_disciplina"));
                disciplina.setNoDisciplina(rs.getString("NO_disciplina"));
                disciplina.setNrPeriodo(rs.getInt("NR_periodo"));
                disciplina.setTbCursoIdCdCurso(rs.getInt("tb_curso_ID_CD_curso"));
            }
            rs.close();
        } catch (Exception ex) {            
        }
        return disciplina;
    } 
        
    //
    public ArrayList consultarAnoTurmas(String idDisciplina, String idProfessor, 
                String idCurso, String idTurno, String idSemestre) {        
        String SQL = "select distinct dt_ano from tb_turma WHERE " +
                     "tb_disciplina_id_cd_disciplina = <01> " +
                     "AND tb_professor_ID_CD_drt = <02> " +
                     "AND tb_curso_id_cd_curso = <03> " +
                     "AND HR_turno = '<04>' " +
                     "AND NR_semestre = <05>";
        SQL = SQL.replaceAll("<01>", idDisciplina);
        SQL = SQL.replaceAll("<02>", idProfessor);
        SQL = SQL.replaceAll("<03>", idCurso);
        SQL = SQL.replaceAll("<04>", idTurno);
        SQL = SQL.replaceAll("<05>", idSemestre);
        ArrayList anosList = new ArrayList();
        try{
            ResultSet rs = bd.getResultSet(SQL);
            while(rs.next()){
                anosList.add(rs.getInt("dt_ano"));
            }
            rs.close();
        } catch (Exception ex) {            
        }
        return anosList;
    }       
    
    //
    public ArrayList consultarTurmas(String idDisciplina, String idProfessor, 
                String idCurso, String idTurno, String idSemestre, String idAno) {        
        String SQL = "select id_turma, SG_turma from tb_turma WHERE " +
                     "tb_disciplina_id_cd_disciplina = <01> " +
                     "AND tb_professor_ID_CD_drt = <02> " +
                     "AND tb_curso_id_cd_curso = <03> " +
                     "AND HR_turno = '<04>' " +
                     "AND NR_semestre = <05> " +
                     "AND DT_ano = <06>";
        SQL = SQL.replaceAll("<01>", idDisciplina);
        SQL = SQL.replaceAll("<02>", idProfessor);
        SQL = SQL.replaceAll("<03>", idCurso);
        SQL = SQL.replaceAll("<04>", idTurno);
        SQL = SQL.replaceAll("<05>", idSemestre);
        SQL = SQL.replaceAll("<06>", idAno);
        ArrayList turmasList = new ArrayList();
        TurmaVO turma;
        try{
            ResultSet rs = bd.getResultSet(SQL);
            while(rs.next()){
                turma = new TurmaVO();
                turma.setIdTurma(rs.getInt("id_turma"));
                turma.setSgTurma(rs.getString("SG_turma"));
                turmasList.add(turma);
            }
            rs.close();
        } catch (Exception ex) {            
        }
        return turmasList;
    }     
}